home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 October: Mac OS SDK / Dev.CD Oct 96 SDK / Dev.CD Oct 96 SDK2.toast / Development Kits (Disc 2) / OpenDoc Development Framework / ODFDev / Draw / Sources / DrawLink.h < prev    next >
Encoding:
Text File  |  1996-08-16  |  8.4 KB  |  268 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                DrawLink.h
  4. //    Release Version:    $ ODF 1 $
  5. //
  6. //    Author:                Henri Lamiraux
  7. //
  8. //    Copyright:    (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
  9. //
  10. //========================================================================================
  11.  
  12. #ifndef DRAWLINK_H
  13. #define DRAWLINK_H
  14.  
  15. // ----- Part Layer -----
  16.  
  17. #ifndef FWLNKDST_H
  18. #include "FWLnkDst.h"
  19. #endif
  20.  
  21. #ifndef FWLNKSRC_H
  22. #include "FWLnkSrc.h"
  23. #endif
  24.  
  25. #ifndef FWLNKMGR_H
  26. #include "FWLnkMgr.h"
  27. #endif
  28.  
  29. #ifndef FWPOINT_H
  30. #include "FWPoint.h"
  31. #endif
  32.  
  33. //========================================================================================
  34. //    Forward Declarations
  35. //========================================================================================
  36.  
  37. class FW_CFrame;
  38. class FW_CCloneInfo;
  39.  
  40. class CBaseShape;
  41. class CDrawSelection;
  42. class CDrawPart;
  43. class CDrawContent;
  44. class CDrawLinkContent;
  45. class CDrawLinkSourceContent;
  46. class CGroupShape;
  47.  
  48. //========================================================================================
  49. //    class CDrawPublishLink
  50. //========================================================================================
  51.  
  52. class CDrawPublishLink : public FW_CLinkSource
  53. {
  54.   public:
  55.     CDrawPublishLink(Environment* ev, 
  56.                     ODUpdateID updateID, 
  57.                     FW_CPresentation* presentation,
  58.                     CDrawSelection* drawSelection,
  59.                     FW_Boolean saveSelection);
  60.     virtual ~ CDrawPublishLink();
  61.     
  62.     //--- FW_CLinkSource overrides
  63.     virtual void        LinkEstablished(Environment* ev);
  64.     virtual void        ExternalizeLinkContent(Environment* ev, ODStorageUnit* linkSU);
  65.     
  66.     virtual void        DoExternalizeLink(Environment* ev, ODStorageUnit* storageUnit,
  67.                                           FW_CCloneInfo* cloneInfo);
  68.  
  69.     virtual FW_Boolean    HasEmbeddedFrame(Environment* ev, ODFrame* odEmbeddedFrame);
  70.  
  71.     //--- May move to FW_CLinkSource
  72.     virtual FW_CFrame*    GetFrameToRevealLink(Environment* ev);
  73.     virtual void        DoSelect(Environment* ev, FW_CFrame* frame);
  74.  
  75.     //--- Part-specific
  76.     void                AddShape(Environment* ev, CBaseShape* shape);
  77.     FW_Boolean            IsEmpty();
  78.     void                RemoveShape(Environment* ev, CBaseShape* shape);
  79.  
  80.   private:
  81.     CDrawSelection*            fDrawSelection;
  82.     CDrawLinkSourceContent*    fPublishedContent;
  83. };
  84.  
  85. //========================================================================================
  86. // class CDrawPublishLinkCollection
  87. //========================================================================================
  88.  
  89. class CDrawPublishLinkCollection : public FW_TOrderedCollection<CDrawPublishLink>
  90. {
  91. public:
  92.     FW_DECLARE_AUTO(CDrawPublishLinkCollection)
  93.     
  94.     CDrawPublishLinkCollection() :
  95.         FW_TOrderedCollection<CDrawPublishLink>(){}
  96.     ~CDrawPublishLinkCollection() {}
  97. };
  98.  
  99.  
  100.  
  101. //========================================================================================
  102. // class CDrawPublishLinkCollectionIterator
  103. //========================================================================================
  104.  
  105. class CDrawPublishLinkCollectionIterator : public FW_TOrderedCollectionIterator<CDrawPublishLink>
  106. {
  107. public:
  108.     FW_DECLARE_AUTO(CDrawPublishLinkCollectionIterator)
  109.     
  110.     CDrawPublishLinkCollectionIterator(CDrawPublishLinkCollection* collection) :
  111.         FW_TOrderedCollectionIterator<CDrawPublishLink>(collection){}
  112.     ~CDrawPublishLinkCollectionIterator() {}
  113. };
  114.  
  115. //========================================================================================
  116. //    class CDrawSubscribeLink
  117. //========================================================================================
  118.  
  119. class CDrawSubscribeLink : public FW_CLinkDestination
  120. {
  121.     friend class CDrawLinkManager;
  122.  
  123.   public:
  124.     CDrawSubscribeLink(Environment* ev, ODLink* odLink,
  125.                         FW_CPresentation* presentation, 
  126.                         CDrawSelection* drawSelection,
  127.                         ODLinkInfo* linkInfo,
  128.                         FW_Boolean createGroupShape=true);
  129.     virtual ~ CDrawSubscribeLink();
  130.  
  131.     //--- FW_CLinkDestination Overrides ---
  132.     virtual FW_Boolean    DoUpdateLink(Environment* ev, ODStorageUnit* linkContentSU, ODPasteAsResult* embedAsInfo);
  133.     virtual void        BreakLink(Environment* ev);
  134.     virtual void        RestoreLink(Environment* ev, FW_CPart* part);
  135.  
  136.     virtual void        DoExternalizeLink(Environment* ev, ODStorageUnit* storageUnit,
  137.                                       FW_CCloneInfo* cloneInfo);
  138.  
  139.     //--- Draw part-specific ---
  140.   public:
  141.     void DeleteShapes(Environment* ev);
  142.     void SelectShapes(Environment* ev);
  143.  
  144.     void AdjustUpdateOffset(Environment* ev, const FW_CPoint& delta);
  145.     void SetUpdateOffset(Environment* ev, const FW_CPoint& offset);
  146.     
  147.   private:
  148.     void UpdateLinkedContent(Environment* ev);
  149.     
  150.     void AddShape(Environment* ev, CBaseShape* shape);
  151.     void SetGroupShape(Environment* ev, CGroupShape* shape);
  152.  
  153.   private:
  154.     CDrawPart*                        fDrawPart;
  155.     CDrawSelection*                    fDrawSelection;
  156.     CDrawLinkContent*                fLinkedContent;
  157.     CGroupShape*                    fGroupShape;
  158.     FW_CPoint                        fUpdateOffset;
  159.     FW_Boolean                        fFirstUpdate;
  160.     FW_Boolean                        fFirstOffset;
  161. };
  162.  
  163. //----------------------------------------------------------------------------------------
  164. inline void CDrawSubscribeLink::SetUpdateOffset(Environment* ev, const FW_CPoint& offset)
  165. {
  166.     fUpdateOffset = offset;
  167. }
  168.  
  169. //========================================================================================
  170. // class CDrawSubscribeLinkCollection
  171. //========================================================================================
  172.  
  173. class CDrawSubscribeLinkCollection : public FW_TOrderedCollection<CDrawSubscribeLink>
  174. {
  175. public:
  176.     FW_DECLARE_AUTO(CDrawSubscribeLinkCollection)
  177.     
  178.     CDrawSubscribeLinkCollection() :
  179.         FW_TOrderedCollection<CDrawSubscribeLink>(){}
  180.     ~CDrawSubscribeLinkCollection() {}
  181. };
  182.  
  183.  
  184.  
  185. //========================================================================================
  186. // class CDrawSubscribeLinkCollectionIterator
  187. //========================================================================================
  188.  
  189. class CDrawSubscribeLinkCollectionIterator : public FW_TOrderedCollectionIterator<CDrawSubscribeLink>
  190. {
  191. public:
  192.     FW_DECLARE_AUTO(CDrawSubscribeLinkCollectionIterator)
  193.     
  194.     CDrawSubscribeLinkCollectionIterator(CDrawSubscribeLinkCollection* collection) :
  195.         FW_TOrderedCollectionIterator<CDrawSubscribeLink>(collection){}
  196.     ~CDrawSubscribeLinkCollectionIterator() {}
  197. };
  198.  
  199.  
  200. //========================================================================================
  201. //    class CDrawLinkManager
  202. //========================================================================================
  203.  
  204. class CDrawLinkManager : public FW_CLinkManager
  205. {
  206. //----------------------------------------------------------------------------------------
  207. //    Constructors/Destructors
  208. //
  209.   public:
  210.     FW_DECLARE_AUTO(CDrawLinkManager)
  211.  
  212.     CDrawLinkManager(Environment* ev, CDrawPart* thePart);
  213.     virtual ~CDrawLinkManager();
  214.  
  215. //----------------------------------------------------------------------------------------
  216. //    Override Methods
  217. //
  218.   public:
  219.     virtual FW_CLinkSource*     NewLinkSource(Environment* ev, 
  220.                                               ODUpdateID updateID, 
  221.                                               FW_CPresentation* presentation);
  222.     virtual FW_CLinkDestination* NewLinkDestination(Environment* ev, 
  223.                                                     ODLink* odLink,
  224.                                                     ODLinkInfo* linkInfo,
  225.                                                     FW_CPresentation* presentation);
  226.  
  227.     virtual ODLinkSource*        CreateLink(Environment* ev, ODByteArray* data);
  228.  
  229.     virtual void                DoChangeLinkStatus(Environment* ev, ODFrame* odFrame);
  230.                                 // formerly named LinkStatusChanged
  231.  
  232.     virtual void                RevealLink(Environment* ev, ODLinkSource* linkSource);
  233.  
  234. //----------------------------------------------------------------------------------------
  235. //    Support for Persistent Links
  236. //
  237.   public:
  238.     virtual FW_CLinkSource*        DoInternalizeOneSourceLink(Environment* ev, 
  239.                                                            ODStorageUnit* storageUnit,
  240.                                                            ODUpdateID updateID);
  241.     virtual FW_CLinkDestination* DoInternalizeOneDestLink(Environment* ev, 
  242.                                                          ODStorageUnit* storageUnit,
  243.                                                          ODLink* odLink, 
  244.                                                          ODLinkInfo* linkInfo);
  245.  
  246.     virtual ODValueType            GetSourceLinkFormat(Environment* ev);
  247.     virtual ODValueType            GetDestLinkFormat(Environment* ev);
  248.  
  249.   private:
  250.     ODULong GetSUValue(Environment* ev, ODStorageUnit* su, unsigned long size, void *buffer);
  251.  
  252. //----------------------------------------------------------------------------------------
  253. //    Support for Undo/Redoing PasteAs
  254. //
  255.   public:
  256.     virtual void UndoPasteAs(Environment* ev, CDrawSubscribeLink* link);
  257.     virtual void RedoPasteAs(Environment* ev, CDrawSubscribeLink* link);
  258.  
  259.     void SelectSubscribedShapes(Environment* ev, CDrawSubscribeLink* link);
  260.  
  261. //----------------------------------------------------------------------------------------
  262. //    Data Members
  263. //
  264.   private:
  265.     CDrawPart*        fDrawPart;
  266. };
  267.  
  268. #endif